/**
 * 单链表
 * 定义: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
 */
#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include "option_config.h"

//operation detail
//initization
void LinkedInitList(List *list);

//push data int the end
void linked_push_back(List *list, ElemType x);

//push data in the front
void linked_push_front(List *list, ElemType x);

//show data
void linked_show_list(List *list);

//deleted int the end
void linked_pop_back(List *list);

//deleted int the front
void linked_pop_front(List *list);

//按值插入(按照链表内的数据从小到大排序的规则进行插入)
void linked_insert_val(List *list, ElemType x);

//查找某数据在链表中第一次出现的数据结点
Node *linked_find(List *list, ElemType x);

//查找有效结点的个数
int linked_length(List *list);

//删除链表中某值第一次出现的结点
//按照值来删除方法一：查找要删除结点位置来进行删除
void linked_delete_val(List *list, ElemType x);

//按照值来删除方法二：查找要删除结点的前驱结点位置来进行删除
void linked_delete_val2(List *list, ElemType x);

//排序
void linked_order(List *list);

//逆序
void linked_resver(List *list);

//清除链表 不断进行头删，当有效结点都删除完成之后，将尾指针指向头结点，将有效结点个数设置为0
void linked_clear(List *list);

//销毁链表 释放所有结点即包括头结点和有效结点
void linked_destory(List *list);

/*代码优化*/
typedef Node *it;

//Node* _buynode(ElemType x);
it begin(List *list);

it end(List *list);

void linked_insert(List *list, it pos, ElemType x);


#endif //LINKEDLIST_H
